package com.jn.erp.wechat.staff.api.controller;

import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.jn.erp.common.core.result.AjaxResult;
import com.jn.erp.wechat.common.api.controller.base.BaseWxAuthController;
import com.jn.erp.wechat.common.api.entity.dto.WxMpDto;
import com.jn.erp.wechat.staff.handler.MiniappInfoHandler;
import com.jn.erp.wechat.staff.handler.MiniappMessageHandler;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;



/**
 * <pre>
 *  小程序交互信息
 * </pre>
 *
 * @author sunjiyong
 * @since 2024/9/10 9:50
 */
@AllArgsConstructor
@RestController
@RequestMapping("/wx/maportal")
public class MiniappController extends BaseWxAuthController {

    @Autowired
    private MiniappInfoHandler miniappInfoHandler;
    @Autowired
    private MiniappMessageHandler miniappMessageHandler;

    @PostMapping("/getAccessToken")
    public AjaxResult getAccessToken() {
        String accessToken = miniappInfoHandler.getAccessToken();
        if (StrUtil.isBlank(accessToken)) {
            return error("获取token失败");
        }
        return AjaxResult.success("操作成功", accessToken);
    }

    @PostMapping("/jsCode2SessionInfo")
    public AjaxResult jsCode2SessionInfo(@RequestBody WxMpDto wxMpDto) {
        WxMaJscode2SessionResult wxMaJscode2SessionResult = miniappInfoHandler.jsCode2SessionInfo(wxMpDto.getCode());
        if (wxMaJscode2SessionResult == null) {
            return error("获取信息失败");
        }
        return success(wxMaJscode2SessionResult);
    }

    @PostMapping("/getPhoneNumber")
    public AjaxResult getPhoneNumber(@RequestBody WxMpDto wxMpDto) {
        JSONObject phoneNumberInfo = miniappInfoHandler.getPhoneNumber(wxMpDto.getCode());
        if(phoneNumberInfo==null){
            return error("获取用户手机信息失败");
        }
        return success(phoneNumberInfo);
    }

    @GetMapping("/sendSubscribeMsg")
    public AjaxResult sendSubscribeMsg() {
        Boolean aBoolean = miniappMessageHandler.sendSubscribeMsg();
        if (aBoolean) {
            return AjaxResult.success();
        } else {
            return error("发送消息失败");
        }
    }


    //登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。
//    @PostMapping("/getUserInfo")
//    public AjaxResult getUserInfo(@RequestBody WxMpTDO wxMpTDO)   {
//        try {
//            WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(wxMpTDO.getSessionKey(), wxMpTDO.getEncryptedData(), wxMpTDO.getIvStr());
//            WxMaConfigHolder.remove();//清理ThreadLocal
//            return AjaxResult.success(userInfo);
//        }catch (Exception e){
//            return AjaxResult.error(e.getMessage());
//        }
//    }



//
//
//    /**
//     * <pre>
//     * 获取用户信息接口
//     * </pre>
//     */
//    @GetMapping("/info")
//    public String info(String sessionKey,
//                       String signature, String rawData, String encryptedData, String iv) {
//        String appid = MiniappService.getDefaultAppId();
//
//        if (!wxMaService.switchover(appid)) {
//            throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置，请核实！", appid));
//        }
//
//        // 用户信息校验
//        if (!wxMaService.getUserService().checkUserInfo(sessionKey, rawData, signature)) {
//            WxMaConfigHolder.remove();//清理ThreadLocal
//            return "user check failed";
//        }
//
//        // 解密用户信息
//        WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(sessionKey, encryptedData, iv);
//        WxMaConfigHolder.remove();//清理ThreadLocal
//        userInfo.
//        return JsonUtils.toJson(userInfo);
//    }
}
